import { EventType, IntervalTimeUnit } from "../../types/L_Type"
import IDGen from "../../utils/IDGen"
import EventManager from "../EventManager"





/**  */
export default abstract class EventX{
    /**事件id EventManager工具 */
    eventId:number
    /**事件类型 */
    eventType:EventType
    /**事件动作 间隔单位 */
    intervalUnit:IntervalTimeUnit
    /**事件动作 间隔值 */
    intervalVal:number
    /**循环执行剩余次数  */
    execLastedNums:number
    /**已执行次数(方便调用者执行一些额外逻辑)  */
    hasExecNums:number
    /**事件自身的参数 */
    // parameters?:object
    /**下次应该执行的中心时间戳 */
    execCTimestamp!:number
    /**是否被暂停执行 默认初始不暂停 */
    bePaused:boolean
    


    constructor(eventType:EventType,intervalUnit:IntervalTimeUnit,intervalVal:number,execLastedNums:number){
        this.eventType=eventType
        this.intervalUnit=intervalUnit
        this.intervalVal=intervalVal
        this.execLastedNums=execLastedNums
        this.eventId=IDGen.getNextId('EVENT')
        this.hasExecNums=0
        this.bePaused=false
    }

    // public getHasExecNums():number{
    //     return this.hasExecNums
    // }
    public pauseEvent(){
        this.bePaused=true
    }

    public resumePause(){
        this.bePaused=false
    }

    /**事件被添加到队列管理器开始执行 */
    public beAddedAndExec():void{
        EventManager.addEventAndExec(this)
    }

    /**事件开始（第一次被执行） */
    public abstract start():void;

    /**事件执行中 */
    public abstract run():void;

    /**事件结束 非executor类请不要直接调用*/
    public abstract end():void;

    /**立即结束事件 */
    public endImmed(){
        this.execLastedNums=-1
        this.end()
    }
  
}  